package com.didispace.domain;

import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.jpa.repository.JpaRepository;


/**
 * @author 程序猿DD
 * @version 1.0.0
 * @date 16/3/23 下午2:34.
 * @blog http://blog.didispace.com
 */
@CacheConfig(cacheNames = "users")
public interface UserRepository extends JpaRepository<User, Long> {
	/*
	 * @Cacheable 主要的参数
		value	缓存的名称，在 spring 配置文件中定义，必须指定至少一个	例如：@Cacheable(value=”mycache”) 或者 
		key	缓存的 key，可以为空，如果指定要按照 SpEL 表达式编写，如果不指定，则缺省按照方法的所有参数进行组合	例如：@Cacheable(value=”testcache”,key=”#userName”)
		condition	缓存的条件，可以为空，使用 SpEL 编写，返回 true 或者 false，只有为 true 才进行缓存	例如：@Cacheable(value=”testcache”,condition=”#userName.length()>2”)
	 */
    @Cacheable(key = "#p0")
    User findByName(String name);
    
    /**
     * @CachePut 和@Cacheable的区别是修改了只会重新同步到缓存上面
     */
    @CachePut(key = "#p0.name")
    User save(User user);

}
